When transmitting data over a communications network, information is oftentimes transmitted in packets containing the data and a ‘header’. The header contains information that defines various aspects of the packet. These aspects may be the source (sender) and destination (receiver) addresses, message identification information, the amount of data that is contained in the packet, etc. A message that cannot be accommodated in a single packet is split into a series of packets for network transmittal. Thus, the overall communication occurs as a series of packet transmittals between the source (sending) and destination (receiving) hosts (typically a computer system of some type). Within the network, packets are switched or routed at points usually called a ‘hop’; hops are connected by ‘links’. The destination host reassembles the packets from the original message. In general, each packet is not constrained to travel along the same path as others, and, at each hop or link, one or more packets may become lost or destroyed. Thus, only a partial set of the originally transmitted packets may arrive at its destination and, furthermore, they may arrive in an out-of-order fashion (e.g. in an order different from that sent). Duplicated packets may also arrive at the destination if the source re-transmits a packet, or if the network takes some other corrective action.
Although current technologies permit dynamic routing of individual packets, such abilities may be inadequate for demanding applications. For example, real-time streaming or lengthy sessions may still be subject to several undesirable events attributable to network connectivity problems including: temporary (and permanent) interruption; partial loss of data; and widely sporadic packet arrivals at the destination. These effects may cause communicating hosts to prematurely disconnect or abort their communication (e.g. when watchdog timers expire); or cause unacceptable service for ‘real-time’ packet delivery-where such packets require timely delivery to be of any use.
Several approaches have been suggested to remedy these problems, including: handling of the problem at protocol levels above the packet or network levels (e.g. at the application level), the use of hosts acting as proxies or caches (intermediate storage), improvements to traffic shaping, source pacing or advanced flow-control techniques (e.g. “SureStream,” RealNetworks, Inc., white paper, Seattle, Wash.), preferential selection of the data source host statically before the transmission begins (see Brian Kenner, et al, “System and method for optimized storage and retrieval of data on a distributed computer network,” U.S. Pat. No. 6,003,030 issued 14, Dec. 1999), new network router techniques and algorithms, as well as other techniques. These existing techniques can be categorized as advanced caching, proxy or flow-control methods, or as static server load balancing methods, and are either tailored to recovery of lost data after detection (often times by the client), or are application level techniques. As such, they cannot overcome basic packet level communication disruptions between hosts as they arise from time to time (dynamically) in large networks. Network proxies act as intermediate storage points for a set of receiving hosts, but do not alter the network routing of packets from original source to proxy nor from proxy to destination.
Current packet-based routers provide a limited form of dynamic routing capabilities since they may decide which route/path (and thence subsequent hop) to send an incoming packet based on link status or load. However, such a decision is local to the router and hence meeting broad end-to-end service criteria or providing server management is unobtainable with this approach.